#============================================================
#	Damage Wrapper
#============================================================
#  伤害的包装器
# * 获取目标的 DamageWrapper 包装器，进行传入伤害数据
# * 调用 to_damage 方法对指定的目标进行伤害
# * 调用 take_damage 方法对当前包装器的宿主造成伤害
# * 造成伤害的操作需要当前包装器 took_damage 信号连接方法进行逻辑编写 
#============================================================
# @datetime: 2022-4-17 10:55:49
#============================================================
class_name DamageWrapper
extends Wrapper


func _init(host).(host):
	pass


#============================================================
#   自定义
#============================================================
signal took_damage(data)
signal dead


##  让宿主对目标造成伤害 
## @target  目标
## @data  附加数据
func to_damage(target, data: Dictionary = {}) -> void:
	# 获取目标的 这个类 DamageWrapper
	var wrapper = WrapperInterface.get_wrapper(target, get_script())
	if wrapper:
		data['attacker'] = get_host()	# 攻击者
		data['target'] = target	# 攻击目标
		wrapper.take_damage(data)


##  让宿主受到伤害
## @damage  伤害值
## @return  返回操作后的数据
func take_damage(data : Dictionary) -> Dictionary:
	data['target'] = get_host()	# 受伤者对象
	emit_signal("took_damage", data)
	return data


##  发出死亡信号，用于角色死亡时发出
## @return  
func emit_death_signal() -> DamageWrapper:
	emit_signal("dead")
	return self


